home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / system-config-printer / troubleshoot / ChooseNetworkPrinter.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  5.8 KB  |  147 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import cups
  5. import gobject
  6. from timedops import TimedOperation
  7. from base import *
  8.  
  9. class ChooseNetworkPrinter(Question):
  10.     
  11.     def __init__(self, troubleshooter):
  12.         Question.__init__(self, troubleshooter, 'Choose network printer')
  13.         page1 = self.initial_vbox(_('Choose Network Printer'), _("Please select the network printer you are trying to use from the list below. If it does not appear in the list, select 'Not listed'."))
  14.         tv = gtk.TreeView()
  15.         name = gtk.TreeViewColumn(_('Name'), gtk.CellRendererText(), text = 0)
  16.         location = gtk.TreeViewColumn(_('Location'), gtk.CellRendererText(), text = 1)
  17.         info = gtk.TreeViewColumn(_('Information'), gtk.CellRendererText(), text = 2)
  18.         name.set_property('resizable', True)
  19.         location.set_property('resizable', True)
  20.         info.set_property('resizable', True)
  21.         tv.append_column(name)
  22.         tv.append_column(location)
  23.         tv.append_column(info)
  24.         tv.set_rules_hint(True)
  25.         sw = gtk.ScrolledWindow()
  26.         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
  27.         sw.set_shadow_type(gtk.SHADOW_IN)
  28.         sw.add(tv)
  29.         page1.pack_start(sw, True, True, 0)
  30.         self.treeview = tv
  31.         troubleshooter.new_page(page1, self)
  32.  
  33.     
  34.     def display(self):
  35.         answers = self.troubleshooter.answers
  36.         if answers['cups_queue_listed']:
  37.             return False
  38.         if not answers.get('remote_server_cups', False):
  39.             return False
  40.         server = answers['remote_server_name']
  41.         model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)
  42.         self.model = model
  43.         self.treeview.set_model(model)
  44.         iter = model.append(None)
  45.         model.set(iter, 0, _('Not listed'), 1, '', 2, '', 3, None)
  46.         parent = self.troubleshooter.get_window()
  47.         
  48.         try:
  49.             cups.setServer(server)
  50.             self.op = TimedOperation(cups.Connection, parent = parent)
  51.             c = self.op.run()
  52.             self.op = TimedOperation(c.getDests, parent = parent)
  53.             dests = self.op.run()
  54.             printers = None
  55.             dests_list = []
  56.             for name, instance in dests.iteritems():
  57.                 dest = None
  58.                 if name == None:
  59.                     continue
  60.                 
  61.                 if instance != None:
  62.                     queue = '%s/%s' % (name, instance)
  63.                 else:
  64.                     queue = name
  65.                 if printers == None:
  66.                     self.op = TimedOperation(c.getPrinters)
  67.                     printers = self.op.run()
  68.                 
  69.                 if not printers.has_key(name):
  70.                     info = _('Unknown')
  71.                     location = _('Unknown')
  72.                 else:
  73.                     printer = printers[name]
  74.                     info = printer.get('printer-info', _('Unknown'))
  75.                     location = printer.get('printer-location', _('Unknown'))
  76.                 dests_list.append((queue, location, info, dest))
  77.             
  78.             dests_list.sort((lambda x, y: cmp(x[0], y[0])))
  79.             for queue, location, info, dest in dests_list:
  80.                 iter = model.append(None)
  81.                 model.set(iter, 0, queue, 1, location, 2, info, 3, dest)
  82.         except cups.HTTPError:
  83.             None if not server else answers['cups_queue_listed']
  84.             None if not server else answers['cups_queue_listed']
  85.         except cups.IPPError:
  86.             pass
  87.         except RuntimeError:
  88.             pass
  89.         except:
  90.             None if not server else answers['cups_queue_listed']
  91.  
  92.         return True
  93.  
  94.     
  95.     def connect_signals(self, handler):
  96.         self.signal_id = self.treeview.connect('cursor-changed', handler)
  97.  
  98.     
  99.     def disconnect_signals(self):
  100.         self.treeview.disconnect(self.signal_id)
  101.  
  102.     
  103.     def can_click_forward(self):
  104.         (model, iter) = self.treeview.get_selection().get_selected()
  105.         if iter == None:
  106.             return False
  107.         return True
  108.  
  109.     
  110.     def collect_answer(self):
  111.         if not self.troubleshooter.answers.get('remote_server_cups', False):
  112.             return { }
  113.         (model, iter) = self.treeview.get_selection().get_selected()
  114.         if not model:
  115.             return { }
  116.         dest = model.get_value(iter, 3)
  117.         if dest == None:
  118.             
  119.             class enum_dests:
  120.                 
  121.                 def __init__(self, model):
  122.                     self.dests = []
  123.                     model.foreach(self.each, None)
  124.  
  125.                 
  126.                 def each(self, model, path, iter, user_data):
  127.                     dest = model.get_value(iter, 3)
  128.                     if dest:
  129.                         self.dests.append((dest.name, dest.instance))
  130.                     
  131.  
  132.  
  133.             return {
  134.                 'remote_cups_queue_listed': False,
  135.                 'remote_cups_dests_available': enum_dests(model).dests }
  136.         return {
  137.             'remote_cups_queue_listed': True,
  138.             'remote_cups_dest': dest,
  139.             'remote_cups_queue': dest.name,
  140.             'remote_cups_instance': dest.instance }
  141.  
  142.     
  143.     def cancel_operation(self):
  144.         self.op.cancel()
  145.  
  146.  
  147.